package com.yuhuihui.common.utils.excel;

import com.yuhuihui.common.utils.excel.export.parameters.ExcelExportBatchSheetParameter;
import com.yuhuihui.common.utils.excel.export.parameters.ExcelExportOneSheetParameter;
import com.yuhuihui.common.utils.excel.read.parameters.ExcelReadMapParameter;
import com.yuhuihui.common.utils.excel.read.parameters.ExcelReadObjectParameter;

import java.util.List;
import java.util.Map;

/**
 * excel工具类
 *
 * @author yuhh
 * @date 2019-04-12 15:39
 */
public class ExcelUtil {

    /**
     * 导出excel--单个sheet
     *
     * @param parameter excel导出单个sheet参数
     * @author yuhh
     * @date 2022-08-22 16:19:22
     */
    public static <T> void exportOneSheetExcel(ExcelExportOneSheetParameter<T> parameter) {
        ExcelExportUtil.exportOneSheetExcel(parameter);
    }

    /**
     * 执行导出excel--多个个sheet
     *
     * @param parameter excel导出多个sheet参数
     * @author yuhh
     * @date 2022-08-22 16:19:29
     */
    public static <T> void exportBatchSheetExcel(ExcelExportBatchSheetParameter<T> parameter) {
        ExcelExportUtil.exportBatchSheetExcel(parameter);
    }

    /**
     * 执行导出excel--单个sheet--异步
     *
     * @param parameter excel导出单个sheet参数
     * @author yuhh
     * @date 2022-08-22 16:19:32
     */
    public static <T> void exportOneSheetExcelAsync(ExcelExportOneSheetParameter<T> parameter){
        ExcelExportUtil.exportOneSheetExcelAsync(parameter);
    }

    /**
     * 执行导出excel--多个个sheet--异步
     *
     * @param parameter excel导出多个sheet参数
     * @author yuhh
     * @date 2022-08-22 16:19:35
     */
    public static <T> void exportBatchSheetExcelAsync(ExcelExportBatchSheetParameter<T> parameter){
        ExcelExportUtil.exportBatchSheetExcelAsync(parameter);
    }

    /**
     * 导入excel，并返回实体类list
     *
     * @param parameter excel导入参数
     * @return {@link List }<{@link T }>
     * @author yuhh
     * @date 2022-08-22 16:19:37
     */
    public static <T> List<T> readResultObject(ExcelReadObjectParameter<T> parameter){
        return ExcelReadUtil.readResultObject(parameter);
    }

    /**
     * 执行读取excel，并返回map列表
     *
     * @param parameter 读取excel参数
     * @return {@link List }<{@link T }> 读取后的数据
     * @author yuhh
     * @date 2022-08-22 16:19:44
     */
    public static <T extends Map<String, Object>> List<T> readResultMap(ExcelReadMapParameter<T> parameter){
        return ExcelReadUtil.readResultMap(parameter);
    }

    private ExcelUtil(){

    }
}
